package br.usjt.teste;

import static org.junit.Assert.*;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import br.usjt.dominio.Cliente;
import br.usjt.dominio.ClienteRepositorio;
import br.usjt.servico.DAOFactory;
import br.usjt.servico.IClienteDAO;

public class UC02ConsultarCliente {
	static IClienteDAO clienteDAO;
	static Cliente reCliente;
	static ClienteRepositorio clienteRepositorio;
	static ArrayList<Cliente> vetorClientes ;
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		//tesde na cama de servico
		clienteDAO = DAOFactory.getDAOFactory(DAOFactory.MYSQL).getClienteDAO();
		clienteDAO.cadastra("58905389007", 	"carlos manoel", "r. taquari", "1234-1234");
		clienteDAO.cadastra("74554713431", 	"manoel silva", "av. do estado", "11111111");
		clienteDAO.cadastra("33333333333", 	"rui jose", "av. aguia de haia", "11111111");
		//tesde na camada de dominio
		clienteRepositorio = new ClienteRepositorio();
		reCliente = new Cliente();
		reCliente.setCPF("91350674460");
		reCliente.setNome("carlos andrade");
		reCliente.setTelefone("1234-1234");
		reCliente.setEndereco("r. taquari");
		clienteRepositorio.cadastra(reCliente);
		//reCliente.setNome("carlosmanoeleee");
		vetorClientes = new ArrayList<Cliente>();

	}
	/**
	 * Objetivo- verificar o comportamento da funcao consultar cliente com sucesso
	 */
	@Test
	public void CT01FBConsultaCliente_com_sucesso() {
		try{
		assertEquals("achou o registro =", true, (clienteDAO.consulta("58905389007")).first());
		}
		catch(SQLException sql){
			
		}
	}
	/**
	 * Objetivo- verificar o comportamento da funcao consultar cliente para cpf nao cadastrado
	 */
	@Test
	public void CT02A1ConsultaCliente_cpf_nao_cadastrado() {
		try{
		assertEquals("achou o registro =", false, (clienteDAO.consulta("1")).first());
		}
		catch(SQLException sql){
			sql.printStackTrace();
		}
	}
	/**
	 * Objetivo- verificar o comportamento da funcao consultar cliente pelo nome
	 */
	@Test
	public void CT03A2UC02ConsultaCliente_nome_cadastrado() {
		vetorClientes = clienteRepositorio.consultaNome("manoel");
		assertEquals("verifica o estado do objeto = ", 2, vetorClientes.size());
	}
	/**************************************************************************************************
	 * testes da camada de dominio
	 **************************************************************************************************/
	@Test
	public void ct04uc02consultarcliente() { 
        assertTrue(reCliente.equals(clienteRepositorio.consulta("91350674460")));
	}
	@AfterClass
	public static void tearDownAfterClass() throws Exception {
		clienteDAO.exclui("58905389007");
		clienteDAO.exclui("33333333333");
		clienteDAO.exclui("74554713431");
		clienteDAO.exclui("91350674460");
	}

}
